Message queues may provide asynchronous communications between software applications, meaning the sender and receiver of a message may or may not interact with the message queue at the same time. A message placed onto the queue is stored until the recipient retrieves it. Message queues have implicit or explicit limits on the size of data that may be transmitted in a single message and the number of messages that may remain outstanding on the queue. Many implementations of message queues function internally: within an operating system or an application.